home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Information / CSMP Digest / volume 3 / csmp-digest-v3-031 < prev    next >
Text File  |  1995-12-31  |  55KB  |  1,463 lines

  1. Received-Date: Fri, 27 May 1994 14:28:00 +0200
  2. From: pottier@clipper.ens.fr (Francois Pottier)
  3. Subject: csmp-digest-v3-031
  4. To: csmp-digest@ens.fr
  5. Date: Fri, 27 May 94 14:27:48 MET DST
  6. X-Mailer: ELM [version 2.3 PL11]
  7. Errors-To: listman@ens.fr
  8. Reply-To: pottier@clipper.ens.fr
  9. X-Sequence: 34
  10.  
  11. C.S.M.P. Digest             Fri, 27 May 94       Volume 3 : Issue 31
  12.  
  13. Today's Topics:
  14.  
  15.         Any good Mac C books?
  16.         Basic, basic windows & PICT drawing
  17.         Help: Palette translation in CopyBits
  18.         How do I draw masked icons w-System 6?
  19.         Motorola announces Power Mac compilers
  20.         Polling the Serial Port
  21.  
  22.  
  23.  
  24. The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
  25. (pottier@clipper.ens.fr).
  26.  
  27. The digest is a collection of article threads from the internet newsgroup
  28. comp.sys.mac.programmer.  It is designed for people who read c.s.m.p. semi-
  29. regularly and want an archive of the discussions.  If you don't know what a
  30. newsgroup is, you probably don't have access to it.  Ask your systems
  31. administrator(s) for details.  If you don't have access to news, you may
  32. still be able to post messages to the group by using a mail server like
  33. anon.penet.fi (mail help@anon.penet.fi for more information).
  34.  
  35. Each issue of the digest contains one or more sets of articles (called
  36. threads), with each set corresponding to a 'discussion' of a particular
  37. subject.  The articles are not edited; all articles included in this digest
  38. are in their original posted form (as received by our news server at
  39. nef.ens.fr).  Article threads are not added to the digest until the last
  40. article added to the thread is at least two weeks old (this is to ensure that
  41. the thread is dead before adding it to the digest).  Article threads that
  42. consist of only one message are generally not included in the digest.
  43.  
  44. The digest is officially distributed by two means, by email and ftp.
  45.  
  46. If you want to receive the digest by mail, send email to listserv@ens.fr
  47. with no subject and one of the following commands as body:
  48.     help                        Sends you a summary of commands
  49.     subscribe csmp-digest Your Name    Adds you to the mailing list
  50.     signoff csmp-digest            Removes you from the list
  51. Once you have subscribed, you will automatically receive each new
  52. issue as it is created.
  53.  
  54. The official ftp info is //ftp.dartmouth.edu/pub/csmp-digest.
  55. Questions related to the ftp site should be directed to
  56. scott.silver@dartmouth.edu. Currently no previous volumes of the CSMP
  57. digest are available there.
  58.  
  59. Also, the digests are available to WAIS users as comp.sys.mac.programmer.src.
  60.  
  61.  
  62. -------------------------------------------------------
  63.  
  64. >From ralcasid@tech.iupui.edu (Peter R Alcasid)
  65. Subject: Any good Mac C books?
  66. Date: Fri, 29 Apr 1994 16:37:47 GMT
  67. Organization: Purdue University School of Engineering & Technology at Indianapolis,IN
  68.  
  69. I'm intrested in programming the Mac using Think C.  Does anyone know of any
  70. good books that gives a step by step tutorial on how to program the Macintosh
  71. (i.e. accessing the Toolbox using C).  I've got Inside Macintosh: Macintosh
  72. Toolbox Essentials but everything is in PASCAL!  Any suggestions would be
  73. appretiated.
  74.  
  75. Ron Alcasid
  76.  
  77. +++++++++++++++++++++++++++
  78.  
  79. >From jtbell@presby.edu (Jon Bell)
  80. Date: Sat, 30 Apr 1994 11:05:08 GMT
  81. Organization: Presbyterian College, Clinton, South Carolina USA
  82.  
  83. In article <Cp14uz.K7y@iupui.edu>,
  84. Peter R Alcasid <ralcasid@tech.iupui.edu> wrote:
  85. >I'm intrested in programming the Mac using Think C.  Does anyone know of any
  86. >good books that gives a step by step tutorial on how to program the Macintosh
  87. >(i.e. accessing the Toolbox using C).  
  88.  
  89. "Macintosh C Programming Primer", by Dave Mark and Cartwright Reed,
  90. published by Addison-Wesley.  It's in two volumes.
  91.  
  92. -- 
  93. Jon Bell <jtbell@presby.edu>                        Presbyterian College
  94. Dept. of Physics and Computer Science        Clinton, South Carolina USA
  95.  
  96. +++++++++++++++++++++++++++
  97.  
  98. >From rfblec@sunfish.usd.edu (Bob "Skippy" Blechinger)
  99. Date: Wed, 4 May 1994 10:31:01 GMT
  100. Organization: University of South Dakota
  101.  
  102. ralcasid@tech.iupui.edu (Peter R Alcasid) writes:
  103.  
  104. >I'm intrested in programming the Mac using Think C.  Does anyone know of any
  105. >good books that gives a step by step tutorial on how to program the Macintosh
  106. >(i.e. accessing the Toolbox using C).  I've got Inside Macintosh: Macintosh
  107. >Toolbox Essentials but everything is in PASCAL!  Any suggestions would be
  108. >appretiated.
  109.  
  110. >Ron Alcasid
  111.  
  112. Ron,
  113.   Try "Learn C on the Macintosh" by Dave Mark; it comes with a "lite" 
  114. version of Think C, *and* it comes with an upgrade offer to the *full*
  115. Think C for only $129 (this might have changed since I got mine, though)
  116.  
  117.   After that, you can step up to the "Macintosh C Programming Primer", by
  118. Dave Mark & Cartwright Reed; it's a 2-volume set, and again, quite good...
  119.  
  120.   Hope this helps!
  121.  
  122.   -Bob Blechinger
  123.     AppleCore of Siouxland
  124.       Mac Software Director
  125.         Sioux Falls, South Dakota
  126.           rfblec@sunfish.usd.edu
  127.  
  128.  
  129. +++++++++++++++++++++++++++
  130.  
  131. >From dmoney@magnus.acs.ohio-state.edu (Dean R Money)
  132. Date: 4 May 1994 16:31:48 GMT
  133. Organization: The Ohio State University
  134.  
  135. Bob "Skippy" Blechinger <rfblec@sunfish.usd.edu> wrote:
  136. >ralcasid@tech.iupui.edu (Peter R Alcasid) writes:
  137. >>I'm intrested in programming the Mac using Think C.  Does anyone know of any
  138. >>good books that gives a step by step tutorial on how to program the Macintosh
  139. >>(i.e. accessing the Toolbox using C).  I've got Inside Macintosh: Macintosh
  140. >>Toolbox Essentials but everything is in PASCAL!  Any suggestions would be
  141. >>appretiated.
  142. >
  143. >  Try "Learn C on the Macintosh" by Dave Mark; it comes with a "lite" 
  144. >version of Think C, *and* it comes with an upgrade offer to the *full*
  145. >Think C for only $129 (this might have changed since I got mine, though)
  146. >
  147. >  After that, you can step up to the "Macintosh C Programming Primer", by
  148. >Dave Mark & Cartwright Reed; it's a 2-volume set, and again, quite good...
  149.  
  150. I would agree.  Those three books, along with Inside Mac I, II, V, and VI,
  151. not only got me started in programming on the Mac, but helped me learn
  152. C from scratch.  I did know Pascal before, though, so it wasn't difficult
  153. for me to understand the Pascal examples in IM, and make Toolbox calls
  154. in C.
  155.  
  156. Dean. 
  157.  
  158. +++++++++++++++++++++++++++
  159.  
  160. >From susanlesch@aol.com (SusanLesch)
  161. Date: 4 May 1994 23:33:05 -0400
  162. Organization: America Online, Inc. (1-800-827-6364)
  163.  
  164.   In article <rfblec.768047461@sunfish>,
  165.   rfblec@sunfish.usd.edu (Bob "Skippy" Blechinger) writes:
  166.  
  167. > Try "Learn C on the Macintosh" by Dave Mark; it comes 
  168. > with a "lite" > version of Think C...
  169.  
  170.   Oh, dear, no.
  171.   
  172.   I would _not_ recommend "Learn C on the Macintosh" to
  173.   anyone seriously interested in learning the C language.
  174.   There is no formal definition of all data types, little
  175.   rigor, and a casual attitude that does not lend itself to
  176.   the difficulties of IM. I wish I could suggest an
  177.   alternative, but I must leave that to others.
  178.   
  179.   For examples, that are, sadly, fairly representative of
  180.   the book on the whole: "long" is never defined, mentioned
  181.   once. "continue" is not in the book. There is an
  182.   incomplete definition of the "if" statement, both in the
  183.   text and the appendix, leaving out the essential form "if
  184.   else"!
  185.   
  186.   I believe LCOM causes more harm than good.
  187.  
  188.  
  189. +++++++++++++++++++++++++++
  190.  
  191. >From susanlesch@aol.com (SusanLesch)
  192. Date: 5 May 1994 00:28:02 -0400
  193. Organization: America Online, Inc. (1-800-827-6364)
  194.  
  195.   Sorry, I believe in an earlier post I said "if else" is
  196.   not in "Learn C on the Macintosh". It is "else if" that's
  197.   missing. (We're having AOL problems and I can't retrieve
  198.   what I said.)
  199.   
  200.   While I have the book out, the cover blurb says, among
  201.   other things, "reference material, including glossary,
  202.   Standard Library functions, and a C syntax reference." If
  203.   that's C's syntax, we're all in trouble. For shame,
  204.   Addison-Wesley.
  205.  
  206. +++++++++++++++++++++++++++
  207.  
  208. >From ojtv@sun3.oulu.fi (Olli Vuolteenaho)
  209. Date: Fri, 6 May 1994 15:55:15 GMT
  210. Organization: University of Oulu, Department of Physiology
  211.  
  212. SusanLesch (susanlesch@aol.com) wrote:
  213. :   Sorry, I believe in an earlier post I said "if else" is
  214. :   not in "Learn C on the Macintosh". It is "else if" that's
  215. :   missing. (We're having AOL problems and I can't retrieve
  216. :   what I said.)
  217. :   
  218. :   While I have the book out, the cover blurb says, among
  219. :   other things, "reference material, including glossary,
  220. :   Standard Library functions, and a C syntax reference." If
  221. :   that's C's syntax, we're all in trouble. For shame,
  222. :   Addison-Wesley.
  223.  
  224. Sorry for my ignorance, but what kind of special definition
  225. would "else-if" need? It isn't specifically defined, for example,
  226. in Turbo C/C++ reference manual either, is it.
  227.  
  228. I don't have as pessimistic opinion about Learn C on the Macintosh
  229. as you do.
  230. If you have programming experience it feels awfully slow-paced, but
  231. then it wasn't written for you. I think that it presents the basics
  232. of C in an entertaining way, it might even encourage someone to explore
  233. programming deeper, unlike, for example, Lippman's C++ primer that I've
  234. often seen recommended as the first book on (C++) programming (it's 
  235. an excellent book for the more experienced, though). 
  236. And BTW, 'long' is explained on p. 207 of my LCOM.
  237.  
  238. Olli
  239.  
  240. +++++++++++++++++++++++++++
  241.  
  242. >From susanlesch@aol.com (SusanLesch)
  243. Date: 7 May 1994 00:48:07 -0400
  244. Organization: America Online, Inc. (1-800-827-6364)
  245.  
  246.   In article <1994May6.155515.10438@ousrvr.oulu.fi>,
  247.   ojtv@sun3.oulu.fi (Olli Vuolteenaho) writes: 
  248.  
  249. > what kind of special definition would "else-if" need?... 
  250.  
  251.   For a comparison, take the Waite Group's New C Primer
  252.   Plus. There are three forms described for the if
  253.   statement: if, if-else, and if-else if-else. Lacking
  254.   else-if, a newbie (like me :-) might wind up with nested
  255.   if's, sort of like wasting time with case statements. 
  256.  
  257. > [Learn C on the Macintosh] presents the basics of C in an
  258. > entertaining way, it might even encourage someone to
  259. > explore programming deeper 
  260.  
  261.   Sure, entertainment is part of education. But if
  262.   substance is forfeited in exchange, I am worried. Perhaps
  263.   if the book were titled "Learn C Basics on the
  264.   Macintosh", I wouldn't object so much. It's the reader
  265.   being led to think this is comprehensive C that offends
  266.   me. I'd also like to be taught good habits and structure.
  267.  
  268.   On another tack, take the first incarnation of HyperCard,
  269.   which was presented in an equally "entertaining way" and
  270.   could "encourage" someone to "explore programming
  271.   deeper". The problem here is similar. An informal
  272.   definition of a language, perhaps encouraging
  273.   lackadaisical programming practices, without mention of
  274.   error-checking is _lots_ of fun! 
  275.  
  276. > And BTW, 'long' is explained on p. 207 of my LCOM. 
  277.  
  278.   Yes, in passing, in the middle of an exercise on dice
  279.   rolling, in a chapter titled "Variable Data Types" that
  280.   doesn't define them. Where is the formal presentation of
  281.   data types? Again using New C Primer Plus as a
  282.   comparison, long, int, char, unsigned, float, and double
  283.   are neatly presented in one chapter (3).
  284.  
  285.   Thank you for responding, by the way. Mr. Mark's books
  286.   are extremely popular, and I would not expect many people
  287.   to agree with my assessment of Learn C on the Macintosh.
  288.  
  289. +++++++++++++++++++++++++++
  290.  
  291. >From nick@pitt.edu ( nick.c )
  292. Date: 7 May 94 20:55:24 GMT
  293. Organization: (none)
  294.  
  295. In Article <2q9pdh$1fj@search01.news.aol.com>, susanlesch@aol.com
  296. (SusanLesch) wrote:
  297.  
  298. >  I would _not_ recommend "Learn C on the Macintosh" to
  299. >  anyone seriously interested in learning the C language.
  300. >  There is no formal definition of all data types, little
  301. >  rigor, and a casual attitude that does not lend itself to
  302. >  the difficulties of IM.
  303.  
  304.     While I disagree with this assessment of _Learn_C_on_the
  305.   Macintosh_ (I'm reading the C++ version now, and find it quite
  306.   informative, as I found the C one), if you want rigor and 
  307.   less casual an aproach (and even if you don't) you should have
  308.   a copy of Kernigan and Ritchie.  This is probably stating the
  309.   obvious, but since it is the *definitive* work, you should have
  310.   a copy - no matter what you're doing with C.
  311.  
  312.  
  313.  
  314.    _/   _/  _/  _/_/_/   _/   _/  Sea Shells to C shells,  Waikiki to
  315.   _/_/ _/  _/  _/   _/  _/_/_/     the Internet, a wave, is a wave...
  316.  _/ _/_/  _/  _/       _/ _/
  317. _/   _/  _/   _/_/_/  _/   _/  CompSrv: 71232,766 I-Net: Nick@pitt.edu
  318.  
  319.  
  320. +++++++++++++++++++++++++++
  321.  
  322. >From thundero@news.delphi.com (THUNDERONE@DELPHI.COM)
  323. Date: 9 May 1994 04:07:27 -0000
  324. Organization: Delphi Internet Services Corporation
  325.  
  326. nick@pitt.edu ( nick.c ) writes:
  327.  
  328. >In Article <2q9pdh$1fj@search01.news.aol.com>, susanlesch@aol.com
  329. >(SusanLesch) wrote:
  330.  
  331. >>  I would _not_ recommend "Learn C on the Macintosh" to
  332. >>  anyone seriously interested in learning the C language.
  333. >>  There is no formal definition of all data types, little
  334. >>  rigor, and a casual attitude that does not lend itself to
  335. >>  the difficulties of IM.
  336.  
  337. >    While I disagree with this assessment of _Learn_C_on_the
  338. >  Macintosh_ (I'm reading the C++ version now, and find it quite
  339. >  informative, as I found the C one), if you want rigor and 
  340. >  less casual an aproach (and even if you don't) you should have
  341. >  a copy of Kernigan and Ritchie.  This is probably stating the
  342. >  obvious, but since it is the *definitive* work, you should have
  343. >  a copy - no matter what you're doing with C.
  344.  
  345. If you're learning C++ from Learn C++ on the Macintosh, you're going 
  346. to have serious problems using C++ for any medium to large-sized 
  347. project.  I agree with Susan on "Learn C.."- I know of no one who has 
  348. actually learned good C programming from it.  There are *good* C (and 
  349. C++) books out there.  They usually assume you have a PC or Unix, but 
  350. so does "Learn C on the Macintosh" (printf and fopen are not Macintosh 
  351. calls, you see).  Get one of them instead.
  352.  
  353. You might find the C++ book "quite informative," but that doesn't 
  354. change the fact that it does not teach correct use of C++.  Among 
  355. other things, it does not mention virtual destructors once.  It says 
  356. that because constructors *never* return anything, one should not 
  357. allocate memory in them, and discusses a "two-stage" workaround for 
  358. this "problem." It does not teach proper inheritence theory.  A review 
  359. I read of the book in DDJ mentioned that the book would only be useful 
  360. as a doorstop.  I happen to agree.
  361.  
  362. Chris
  363.  
  364. +++++++++++++++++++++++++++
  365.  
  366. >From $stephan@sasb.byu.edu (Stephan Fassmann)
  367. Date: 9 May 1994 18:39:34 GMT
  368. Organization: Brigham Young University
  369.  
  370. In article <2qkctv$suu@news.delphi.com> thundero@news.delphi.com (THUNDERONE@DELPHI.COM) writes:
  371. >If you're learning C++ from Learn C++ on the Macintosh, you're going 
  372. >to have serious problems using C++ for any medium to large-sized 
  373. >project.  I agree with Susan on "Learn C.."- I know of no one who has 
  374. >actually learned good C programming from it.  There are *good* C (and 
  375. >C++) books out there.  They usually assume you have a PC or Unix, but 
  376. >so does "Learn C on the Macintosh" (printf and fopen are not Macintosh 
  377. >calls, you see).  Get one of them instead.
  378.  
  379.     How about a nice list, Because I would like to get some books on Mac 
  380. c/C++ programing.
  381.  
  382. Stephan Fassmann   InterNet: $stephan@sasb.byu.edu   GEnie: S.FASSMANN
  383. carpe diem                                                carpe noctem
  384.  
  385. +++++++++++++++++++++++++++
  386.  
  387. >From Joe_Cabrera@bmugbost.uu.holonet.net
  388. Date: Tue, 10 May 1994 02:41:47 EST
  389. Organization: BMUG Boston
  390.  
  391. >> I believe ["Learn C on the Macintosh" by Dave Mark] causes more harm than
  392. good.<<
  393.  
  394. Can you offer an alternative text to use, then? I'm also beginning to learn C
  395. and LCOM doesn't feel like a "serious" enough book to begin learning C from. I
  396. also have the Waite group's New C Primer Plus. Is that any better? (As you can
  397. see, since I'm just beginning, I'm more interested in learning C itself rather
  398. than how it applies directly to the Mac yet.)
  399. -BMUG Boston 617-721-5840, East Coast BBS of The World's Largest Mac User Group 
  400.  
  401. +++++++++++++++++++++++++++
  402.  
  403. >From susanlesch@aol.com (SusanLesch)
  404. Date: 10 May 1994 17:21:04 -0400
  405. Organization: America Online, Inc. (1-800-827-6364)
  406.  
  407.   In article
  408.   <1994May10.024147.694130@bmugbost.uu.holonet.net>,
  409.   Joe_Cabrera@bmugbost.uu.holonet.net writes: 
  410.  
  411.   >> I believe ["Learn C on the Macintosh" by Dave Mark]
  412.   causes more harm than good.<< (-SGL)
  413.  
  414. > I also have the Waite group's New C Primer Plus. Is that
  415. > any better? (-JC)
  416.  
  417.   Well, I am no expert, and am as interested in seeing the
  418.   names of some good books as anyone. I used "New C Primer
  419.   Plus" and loved it. The comparisons between K&R and ANSI
  420.   C are simply great. As the only caveat, I skimmed the PC
  421.   / Unix / DOS sections on command lines for the most part,
  422.   keeping in mind that the authors tried to be somewhat
  423.   Macintosh and THINK C aware. My vote says yes, by all
  424.   means, use it.
  425.   
  426.   "New C Primer Plus" is being used on America Online to
  427.   teach C right now in a cross-platform class in their
  428.   online Programmer U, if I'm not mistaken.
  429.  
  430.  
  431. +++++++++++++++++++++++++++
  432.  
  433. >From Chris Hanson <chanson@mtlookitthat.chi.il.us>
  434. Date: Wed, 11 May 94 06:50:50 -0600
  435. Organization: Green Dragon Creations, Inc.
  436.  
  437.  
  438. In article <$stephan.3540.0@sasb.byu.edu>, Stephan Fassmann writes:
  439.  
  440. > In article <2qkctv$suu@news.delphi.com> thundero@news.delphi.com 
  441. (THUNDERONE@DELPHI.COM) writes:
  442. > >If you're learning C++ from Learn C++ on the Macintosh, you're going 
  443.  
  444. > >to have serious problems using C++ for any medium to large-sized 
  445. > >project.  I agree with Susan on "Learn C.."- I know of no one who has 
  446.  
  447. > >actually learned good C programming from it.  There are *good* C (and 
  448.  
  449. > >C++) books out there.  They usually assume you have a PC or Unix, but 
  450.  
  451. > >so does "Learn C on the Macintosh" (printf and fopen are not 
  452. Macintosh 
  453. > >calls, you see).  Get one of them instead.
  454. >     How about a nice list, Because I would like to get some books on Mac 
  455.  
  456. > c/C++ programing.
  457. > Stephan Fassmann   InterNet: $stephan@sasb.byu.edu   GEnie: 
  458. S.FASSMANN
  459. > carpe diem                                                carpe 
  460. noctem
  461.  
  462. "Practical C Programming" from O'Reilly & Associates is one of the best 
  463. C books out there.  It assumes UNIX -- it is an O'Reilly book, after 
  464. all. :-)
  465.  
  466. TTFN,
  467. Chris
  468.  
  469. +++++++++++++++++++++++++++
  470.  
  471. >From kenlong@netcom.com (Ken Long)
  472. Date: Thu, 12 May 1994 01:11:39 GMT
  473. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  474.  
  475. I wouldn't recommend Dave Mark's "Learn C on the Mac" as a first Mac C 
  476. book.  Dan Parks Sydow (DanParks@aol.com) has put out two great beginner 
  477. and beginner/intermediate Mac C books.  They illustrate what they 
  478. discuss.  Get "Think THINK C!" first.  This will get you well into the 
  479. idea, concept and viewpoint of programming on a MAC (leave the DOS C 
  480. books alone for a while).  Once you get that, and get through it, get 
  481. Think C 5.0.4, since it's simplest and most available example source runs 
  482. on it without complication.  Also get at least old volume I and II of 
  483. Inside Mac (if you're low on funds.  If not, get all current IM volumes 
  484. available.
  485.  
  486. Read the IM on what you have already learned, so you can see what the 
  487. explanations connect with, anh how.  That way, when you read on something 
  488. you haven't learned, you'll be better able to make a connection. 
  489.  
  490. Once you've gotten into it you can kind of tell which way to go from 
  491. there.  I'd recommend Dan's second book - Macintosh Programming 
  492. Techniques - to drive in the foundation of what you'll need to go on.  
  493. Then get the Primer books and their disks (saves typing all that in - or 
  494. scan and OCR it).
  495.  
  496. Many other books are just example sourc and explanations with some new 
  497. (to the beginner) how-to.  If you want details on specifics, like ANSI C 
  498. stuff, get The C Programming Language (the "K&R" book).  The Think C 5.x 
  499. Standard Libraries manual is excellent, too.
  500.  
  501. But a major source of "how to program" is example source.  Download as 
  502. much as possible.  Example code that runs is a competent programmer 
  503. telling you HOW to do some aspect of programming.  "Competent" simply 
  504. means he or she wrote a program that runs.  It may not be optimumly 
  505. coded, but it does run.
  506.  
  507. "How do I write a Main Event Loop?"  I look at as many Main Event Loops 
  508. in as many example source projects as it takes to get the idea of how 
  509. they are done.  This shows differences, similarities and identities 
  510. among them, and I can spot how and where to put modifications in.
  511.  
  512. So, those two books, TC 5 (you can update later), New Inside Mac andas 
  513. much example C source as you can get.  Straight Think C source is the 
  514. vast majority of example source you'll find.  Not Pascal, not C++.  Go 
  515. with the flow.
  516.  
  517. -Ken-
  518.  
  519. ---------------------------
  520.  
  521. >From bsa3320@u.cc.utah.edu (Brandon Allen)
  522. Subject: Basic, basic windows & PICT drawing
  523. Date: 13 May 1994 14:13:59 -0600
  524. Organization: University Of Utah Computer Center
  525.  
  526.  
  527. Somebody posted, asking for simple code regarding windows and displaying
  528. PICT's.  I can't find the thread now, but here is a bit of code that may
  529. prove instructive.  I hope it's not TOO basic for you.  I'd be happy to
  530. answer any other questions (for which I have answers).  Just e-mail me, if
  531. you like.  I don't know it all, but I'll be glad to tell you what I do know.
  532.  
  533. ___________________________________________________________________________
  534. { Ok, I'm assuming that you know how to create }
  535. {WIND & PICT resources using ResEdit . }
  536. { The first thing you'll need to do is load the}
  537. { WIND data using the GetNewCWind call, }
  538. { this function will return a WindowPtr to }
  539. { the window you are creating.}
  540.  
  541. PROGRAM ShowAWindow;
  542.  
  543.  VAR
  544.   myWindow: WindowPtr;
  545. { A pointer to your window data }
  546.   windowID: Integer;
  547. { ID number of your WIND resource }
  548.   pictureID: Integer;
  549. { ID of your Pict resource }
  550.   myPicture: PicHandle;
  551. { Handle to the PICT }
  552.   myRect: Rect;
  553. { A rectangle that will enclose the PICT }
  554. { when it is drawn }
  555.  
  556. BEGIN
  557.  windowID := 666;
  558. { Or whatever number you choose as }
  559. { your resource ID }
  560.  
  561.  myWindow := GetNewCWindow(windowID, NIL, WindowPtr(-1));
  562.  
  563. { Now, the nil after the windowID tells }
  564. { the Mac to allocate some new memory for }
  565. { your window, rather than using some }
  566. { that you have already allocated for it. }
  567. { The WindowPtr(-1) tells the computer }
  568. { which window to display the new }
  569. { window BEHIND.  For instance if you }
  570. { wanted your new window to appear behind }
  571. { a window whose data was contained in a }
  572. { variable called frontWind, then you }
  573. { would use frontWind instead.  In this case }
  574. { we want this window to be the }
  575. { front-most window, so we send a }
  576. { WindowPtr that points to the value -1. }
  577. { This is a standard value that tells the }
  578. { computer not to display your window }
  579. { behind any other window. }
  580.  
  581.  SetPort(myWindow);
  582.  
  583. { Now that we have created and displayed }
  584. { our window where we want it, we }
  585. { designate it as the current graphics port. }
  586. { This means that any drawing you }
  587. { do in your program will occur in this window. }
  588.  
  589.  myPicture := GetPicture(pictureID);
  590.  
  591. { This call loads your PICT resource into memory }
  592.  
  593.  IF myPicture <> NIL THEN
  594.   BEGIN
  595.    myRect := myPicture^^.picFrame;
  596.    DrawPicture(myPicture, myRect)
  597.   END;
  598.  
  599. { This bit of code ensures that the previous call }
  600. { to GetPicture was successful.  If the PICT had }
  601. { not been loaded, myPicture would contain NIL. }
  602. { If it doesn't contain NIL, we'll go ahead and draw }
  603. { it into our window with the DrawPicture call. }
  604. { Obviously myPicture is the handle we just }
  605. { created with the GetPicture call.  myRect is }
  606. { the rectangle into which the picture will be }
  607. { drawn.  This Rect is in local coordinates for }
  608. { your window (0,0 corresponds to the upper }
  609. { left hand corner of your window, not of }
  610. { the screen).  If myRect is different from the }
  611. { size of your PICT, QuickDraw will resize it }
  612. { automatically.  Thus, the assignment of the }
  613. { PICT's Rect (myPicture^^.picFrame) to }
  614. { myRect keeps the PICT at its original size. }
  615.  
  616.  
  617. { The rest of your program here ... }
  618.  
  619. END.
  620.  
  621. ---------------------------
  622.  
  623. >From jonbl@microsoft.com (Jon Blossom)
  624. Subject: Help: Palette translation in CopyBits
  625. Date: Tue, 3 May 1994 01:14:07 GMT
  626. Organization: Microsoft Corporation
  627.  
  628. I'm trying to create an off-screen GWorld whose palette
  629. matches the palette of the window I'm copying to.
  630.  
  631. What happens is that I set up a palette, say entry 3
  632. is red, and set it up for both the GWorld and the window.
  633. Then I poke a 3 somewhere into the GWorld memory, but
  634. when I call CopyBits(), the color's been translated to something
  635. else.
  636.  
  637. If I do a PmForeColor(3) then poke the result of a GetForeColor(),
  638. I get the correct results.
  639.  
  640. Somewhere, QuickDraw is remapping colors.
  641.  
  642. Anyone know how to prevent QuickDraw from remapping so that I
  643. have an identity relationship between the color table in my
  644. off-screen GWorld and the palette in my window? I don't
  645. want to have to go through this cheesy translation step!
  646.  
  647. Thanks
  648.  
  649. -Jon Blossom
  650. jonbl@microsoft.com
  651.  
  652. +++++++++++++++++++++++++++
  653.  
  654. >From u9119523@sys.uea.ac.uk (Graham Cox)
  655. Date: Fri, 6 May 1994 16:33:02 GMT
  656. Organization: School of Information Systems, UEA, Norwich
  657.  
  658. In article <Cp7CrM.CyF@microsoft.com>, jonbl@microsoft.com (Jon Blossom)
  659. wrote:
  660.  
  661. > I'm trying to create an off-screen GWorld whose palette
  662. > matches the palette of the window I'm copying to.
  663. > What happens is that I set up a palette, say entry 3
  664. > is red, and set it up for both the GWorld and the window.
  665. > Then I poke a 3 somewhere into the GWorld memory, but
  666. > when I call CopyBits(), the color's been translated to something
  667. > else.
  668. > If I do a PmForeColor(3) then poke the result of a GetForeColor(),
  669. > I get the correct results.
  670. > Somewhere, QuickDraw is remapping colors.
  671. > Anyone know how to prevent QuickDraw from remapping so that I
  672. > have an identity relationship between the color table in my
  673. > off-screen GWorld and the palette in my window? I don't
  674. > want to have to go through this cheesy translation step!
  675. > Thanks
  676. > -Jon Blossom
  677. > jonbl@microsoft.com
  678.  
  679.  
  680. Gosh, someone at Microsoft asking how to do things properly! Whatever next!
  681.  
  682. I suppose I should be nice and try and help, though actually I don't know
  683. the exact answer. However, it is definitely documented in Inside Mac VI in
  684. the Palette Manager chapter. You have to set up your GWorld colour table to
  685. the be the same as the window's colour table, then build a palette for the
  686. window which uses Animated Colours. Then you can draw using indexed values.
  687.  
  688. However, do you NEED to do this? (examine the problem carefully). Normally
  689. you should be working with RGB Colours, and drawing using QuickDraw into
  690. the GWorld- life will be easy if you do it this way, and don't try to draw
  691. with indexes. Of course, there are times when you might legitimately want
  692. to do this, but as I don't know what the problem is in this case, then it's
  693. hard to be sure.
  694.  
  695. One thing I do know is- NEVER,NEVER,NEVER poke indexes into the pixel image
  696. directly- this is a sure fire way of making a program incompatible with the
  697. video device. If QuickDraw doesn't know about the contents of an image
  698. (because you bypassed it) you will almost certainly not end up with what
  699. you want.
  700.  
  701. Please do it right- I know we all love to hate MS products on the Mac, but
  702. they COULD be really good if more people like you asked questions!!!
  703.  
  704. - ------------------------------------------------------------------------
  705. Graham
  706.  
  707. -Everyone is entitled to their opinion, no matter how wrong they may be...
  708. - ------------------------------------------------------------------------
  709.  
  710. +++++++++++++++++++++++++++
  711.  
  712. >From 103t_english@west.cscwc.pima.edu
  713. Date: 7 May 94 10:59:55 MST
  714. Organization: (none)
  715.  
  716. In article <u9119523-060594163303@cmpacc2.sys.uea.ac.uk>, u9119523@sys.uea.ac.uk (Graham Cox) writes:
  717. > In article <Cp7CrM.CyF@microsoft.com>, jonbl@microsoft.com (Jon Blossom)
  718. > wrote:
  719. >> I'm trying to create an off-screen GWorld whose palette
  720. >> matches the palette of the window I'm copying to.
  721. >> 
  722. >> What happens is that I set up a palette, say entry 3
  723. >> is red, and set it up for both the GWorld and the window.
  724. >> Then I poke a 3 somewhere into the GWorld memory, but
  725. >> when I call CopyBits(), the color's been translated to something
  726. >> else.
  727. >> 
  728. >> If I do a PmForeColor(3) then poke the result of a GetForeColor(),
  729. >> I get the correct results.
  730. >> 
  731. >> Somewhere, QuickDraw is remapping colors.
  732. >> 
  733. >> Anyone know how to prevent QuickDraw from remapping so that I
  734. >> have an identity relationship between the color table in my
  735. >> off-screen GWorld and the palette in my window? I don't
  736. >> want to have to go through this cheesy translation step!
  737. >> 
  738. [snip]
  739.  
  740. > One thing I do know is- NEVER,NEVER,NEVER poke indexes into the pixel image
  741. > directly- this is a sure fire way of making a program incompatible with the
  742. > video device. If QuickDraw doesn't know about the contents of an image
  743. > (because you bypassed it) you will almost certainly not end up with what
  744. > you want.
  745.  
  746. What if you are trying to get a video-game to go as fast as possible?
  747. OBviously, QuickDraw is too slow for such purposes...
  748.  
  749. > --------------------------------------------------------------------------
  750. > Graham
  751. > -Everyone is entitled to their opinion, no matter how wrong they may be...
  752. > --------------------------------------------------------------------------
  753.  
  754. Lawson
  755.  
  756. +++++++++++++++++++++++++++
  757.  
  758. >From ltaylor@academic.csubak.edu (John Stiles)
  759. Date: 7 May 1994 22:19:15 GMT
  760. Organization: California State University, Bakersfield
  761.  
  762. >>> Anyone know how to prevent QuickDraw from remapping so that I
  763. >>> have an identity relationship between the color table in my
  764. >>> off-screen GWorld and the palette in my window? I don't
  765. >>> want to have to go through this cheesy translation step!
  766. >>> 
  767.     The same thing happened to me. The GWorld was assigned a clut, this
  768. clut was changed to a palette and was applied to a window. Still, CopyBits
  769. wanted to do colormapping. Great.
  770.     I did notice that the mapping was 0 to 0, 1 to 1, 2 to 2, ... 255 to
  771. 255--i.e., no change. (it had to be with the custom palette I was using!)
  772.     The only workable solution was to implement a cheap blitter. It worked
  773. and I got it running faster than CopyBits anyway. So, problem solved. Still,
  774. there should be a more acceptable solution.
  775.                                 *Stiles
  776.  
  777.  
  778. +++++++++++++++++++++++++++
  779.  
  780. >From hall_j@sat.mot.com (Joseph Hall)
  781. Date: Sun, 8 May 1994 23:40:17 GMT
  782. Organization: Motorola Inc., Satellite Communications
  783.  
  784. Seems it was 103t_english@west.cscwc.pima.edu who said:
  785. >What if you are trying to get a video-game to go as fast as possible?
  786. >OBviously, QuickDraw is too slow for such purposes...
  787.  
  788. Obviously, you have never used a properly-aligned CopyBits.
  789.  
  790. There is no need to draw directly into screen memory on the Mac.  Munge
  791. your bits in your favorite quickest, hairiest way offscreen and then use 
  792. QuickDraw to copy them onto the screen.
  793.  
  794. I'll grant that QuickDraw's line- and circle-drawing algorithms are
  795. both slow and a little weird, but you don't have to use *them* to draw
  796. into an offscreen area.
  797.  
  798. -- 
  799. Joseph Nathan Hall | Joseph's Law of Interface Design: Never give your users
  800. Software Architect | a choice between the easy way and the right way.
  801. Gorca Systems Inc. |                 joseph@joebloe.maple-shade.nj.us (home)
  802. (on assignment)    | (602) 732-2549 (work)  Joseph_Hall-SC052C@email.mot.com
  803.  
  804. +++++++++++++++++++++++++++
  805.  
  806. >From pottier@trimaran.ens.fr (Francois Pottier)
  807. Date: 9 May 1994 10:11:30 GMT
  808. Organization: Ecole Normale Superieure, PARIS, France
  809.  
  810. In article <2qh453$aag@nic-nac.csu.net>,
  811. John Stiles <ltaylor@academic.csubak.edu> wrote:
  812.  
  813. >    The same thing happened to me. The GWorld was assigned a clut, this
  814. >clut was changed to a palette and was applied to a window. Still, CopyBits
  815. >wanted to do colormapping. Great.
  816. >    I did notice that the mapping was 0 to 0, 1 to 1, 2 to 2, ... 255 to
  817. >255--i.e., no change. (it had to be with the custom palette I was using!)
  818. >    The only workable solution was to implement a cheap blitter. It worked
  819. >and I got it running faster than CopyBits anyway. So, problem solved. Still,
  820. >there should be a more acceptable solution.
  821.  
  822. There is one. Just replace the destination color table's ctSeed with
  823. the source table's one. This will let CopyBits know that the color tables
  824. are indeed equal, and no mapping will be performed. I think it is described
  825. in Inside Mac, but I don't know for sure, since Imaging hasn't appeared in
  826. French bookstores yet.
  827.  
  828.  
  829. -- 
  830. Francois Pottier                                            pottier@dmi.ens.fr
  831. - ----------------------------------------------------------------------------
  832. This area dedicated to the preservation of endangered species.         "Moof!"
  833.  
  834. +++++++++++++++++++++++++++
  835.  
  836. >From Phil Smy <psmy@io.org>
  837. Date: 10 May 1994 18:42:26 GMT
  838. Organization: Innotech MultiMedia Corp.
  839.  
  840. In article <2ql28i$1q4@nef.ens.fr> Francois Pottier,
  841. pottier@trimaran.ens.fr writes:
  842. >There is one. Just replace the destination color table's ctSeed with
  843. >the source table's one. This will let CopyBits know that the color tables
  844. >are indeed equal, and no mapping will be performed. I think it is
  845. described
  846. >in Inside Mac, but I don't know for sure, since Imaging hasn't appeared
  847. in
  848. >French bookstores yet.
  849.  
  850. Here's what I do to make a GWorld with matching palette:
  851.  
  852.         thePal = GetPalette(front->macPort);
  853.         if (thePal)
  854.         {
  855.             offColors = GetCTable(ktheCLUT);
  856.             Palette2CTab(thePal,offColors);
  857.         }
  858.  
  859.         GetGWorld(&savePort,&saveDevice);
  860.  
  861.         depth = (*(*saveDevice)->gdPMap)->pixelSize;
  862.         depth = depth & 0x0000FFFF;
  863.  
  864.         error = NewGWorld(&offPort, depth ,&borderRect,offColors,nil,0);
  865.         if (error != noErr)
  866.             // do something about this!
  867.  
  868.         SetGWorld(offPort,nil);
  869.  
  870. I have had no colour mapping problems doing this. I don't know if this
  871. helps.
  872.  
  873. Phil
  874. ******************************************************************
  875. * Phil Smy                    * Interactive CDRom MultiMedia     *
  876. * Sr. Developer               * #include <stddisclaimer.h>       *
  877. * Innotech MultiMedia Corp.   * Wot Gorilla?                     *
  878. ******************************************************************
  879.  
  880. +++++++++++++++++++++++++++
  881.  
  882. >From grobbins@apple.com (Grobbins)
  883. Date: 10 May 1994 19:56:42 -0700
  884. Organization: Skunkworks
  885.  
  886. In article <2qh453$aag@nic-nac.CSU.net>,
  887. John Stiles <ltaylor@academic.csubak.edu> wrote:
  888. >>>> Anyone know how to prevent QuickDraw from remapping so that I
  889. >>>> have an identity relationship between the color table in my
  890. >>>> off-screen GWorld and the palette in my window?
  891. >       The same thing happened to me. The GWorld was assigned a clut, this
  892. >clut was changed to a palette and was applied to a window. Still, CopyBits
  893. >wanted to do colormapping.
  894.  
  895. Did you try setting bit 14 of ctFlags?  Take a look at the
  896. palette manager article in issue 5 of develop and the ctSeed
  897. reference in the Palette Manager chapter of Inside Mac VI
  898. for a discussion of how to use that bit to avoid unintended
  899. color mappings.
  900.  
  901. Grobbins            grobbins@apple.com
  902.  
  903. Usual disclaimers apply.
  904.  
  905.  
  906. +++++++++++++++++++++++++++
  907.  
  908. >From tenglish@west.cscwc.pima.edu
  909. Date: 10 May 94 21:51:32 MST
  910. Organization: (none)
  911.  
  912. In article <1994May8.234017.25097@sat.mot.com>, hall_j@sat.mot.com (Joseph Hall) writes:
  913. > Seems it was 103t_english@west.cscwc.pima.edu who said:
  914. >>What if you are trying to get a video-game to go as fast as possible?
  915. >>OBviously, QuickDraw is too slow for such purposes...
  916. > Obviously, you have never used a properly-aligned CopyBits.
  917. > There is no need to draw directly into screen memory on the Mac.  Munge
  918. > your bits in your favorite quickest, hairiest way offscreen and then use 
  919. > QuickDraw to copy them onto the screen.
  920. > I'll grant that QuickDraw's line- and circle-drawing algorithms are
  921. > both slow and a little weird, but you don't have to use *them* to draw
  922. > into an offscreen area.
  923.  
  924. I'm sorry. From what you had said (as I dimly recall it), you seemed to be
  925. advocating the use of QuickDraw for *everything*.
  926.  
  927. Obviously, CopyBits is part of QUickDraw, but I was taking you to mean circles
  928. and so on as well...
  929.  
  930. Lawson (formerly 103T_English... The Sys Admin got her lines crossed and renamed
  931. my account with my brother's... imagine my surprise...)
  932.  
  933. +++++++++++++++++++++++++++
  934.  
  935. >From Mark Hanrek <hanrek@cts.com>
  936. Date: Wed, 11 May 1994 12:06:41 GMT
  937. Organization: The Information Workshop
  938.  
  939. In article <u9119523-060594163303@cmpacc2.sys.uea.ac.uk> Graham Cox,
  940. u9119523@sys.uea.ac.uk writes:
  941.  
  942. >> I'm trying to create an off-screen GWorld whose palette
  943. >> matches the palette of the window I'm copying to.
  944.  
  945. In addition to the suggestions regarding the ctSeed, try taking the
  946. following approach.
  947.  
  948. - -- Color Tables
  949.  
  950.  
  951. If you can, try to avoid thinking of "a palette of colors" because 
  952. this English expression ends up confusing us when working with the 
  953. Palette Manager, which is clearly from another planet. :)
  954.  
  955. Try an approach that has worked well for me, of working with 
  956. color tables at all times, until the very last minute.
  957.  
  958. Then, when you are ready to activate the colors you need, just before 
  959. drawing to the window, create a palette from your color table using 
  960. CTab2Palette.  E-Z.
  961.  
  962. If you are going to be drawing into a GWorld, have the color table with
  963. the colors you want already attached to the GWorld. It helps to
  964. have the color table supplied when you create the GWorld as well.
  965.  
  966. For example, say you want to read in and draw a GIF picture....
  967.  
  968.   - Read in the GIF data, and extract the color table and picture rect.
  969.   - Create a color table with the picture's colors in it.
  970.   - Create a GWorld of the proper rect and supply the color table, too.
  971.   - While decoding the GIF's pixels, write the values directly into the  
  972.       GWorld's pixels, after having locked it down, natch.
  973.   - Create a palette from the color table using CTab2Palette.
  974.   - Activate the colors using NSetPalette and ActivatePalette
  975.   - Copybits from the GWorld to the window.
  976.  
  977. Also, observe the unwritten rules of always doing...
  978.  
  979.         ForeColor( blackColor );
  980.         BackColor( whiteColor );
  981.  
  982. before performing a CopyBits.
  983.  
  984. - --- Palettes
  985.  
  986. Also, it is good to be up on what the Palette Manager is doing.
  987.  
  988. There is an informative article in the March '93  d e v e l o p  called
  989. "The Palette Manager Way" in the Graphical Truffles column.
  990.  
  991. It describes how one can use the pmTolerant + pmExplicit usage modes
  992. to ensure that the positions of your colors don't change when your
  993. palette is activated.
  994.  
  995. Keep in mind that when you activate your palette, the Palette Manager 
  996. is arbitrating your "request" with the needs of the rest of the windows.
  997.  
  998. If you must have the exact colors you specify, then always use the
  999. pmTolerant + pmExplicit mode when you are creating your color tables 
  1000. and palettes.  
  1001.  
  1002. One thing that helped me get the hang of things was always creating
  1003. palettes and color tables using  ( pmTolerant + pmExplicit ) in the
  1004. appropriate parameter.
  1005.  
  1006. Things will work as you expect because you are essentially "insisting"
  1007. that the Palette Manager give you exactly what you are asking for, and
  1008. leave things in the positions you have them in.
  1009.  
  1010. Once you get things working, then as a separate exercise you can 
  1011. relax your color needs and experiment with the usage modes, if by
  1012. some freak accident of nature you actually have some extra time.  :)
  1013.  
  1014. Hope this helps.
  1015.  
  1016. Mark Hanrek
  1017.  
  1018. +++++++++++++++++++++++++++
  1019.  
  1020. >From jonbl@microsoft.com (Jon Blossom)
  1021. Date: Thu, 12 May 1994 02:59:06 GMT
  1022. Organization: Microsoft Corporation
  1023.  
  1024. >> One thing I do know is- NEVER,NEVER,NEVER poke indexes into the pixel image
  1025. >> directly- this is a sure fire way of making a program incompatible with the
  1026. >> video device. If QuickDraw doesn't know about the contents of an image
  1027. >> (because you bypassed it) you will almost certainly not end up with what
  1028. >> you want.
  1029. >
  1030. >What if you are trying to get a video-game to go as fast as possible?
  1031. >OBviously, QuickDraw is too slow for such purposes...
  1032.  
  1033. Which is basically exactly what I'm trying to do.
  1034.  
  1035. For certain applications, QuickDraw just isn't fast enough. For instance, my
  1036. polygon fills beat QD by about 25% or more because I know exactly how I want
  1037. to draw them.
  1038.  
  1039. What I really want to do is build my image the way I want it then say
  1040. "QuickDraw, here is a picture. Put it on the screen as fast as you can."
  1041.  
  1042. Unfortunately, I know that it's NOT going as fast as it can because it's doing
  1043. this damn color translation along the way even though I know it doesn't have
  1044. to.
  1045.  
  1046. -Jon Blossom
  1047. jonbl@microsoft.com
  1048.  
  1049.  
  1050.  
  1051. ---------------------------
  1052.  
  1053. >From s010mes@discover.wright.edu (Moshe Segal)
  1054. Subject: How do I draw masked icons w-System 6?
  1055. Date: Tue, 10 May 1994 15:33:15 GMT
  1056. Organization: Wright State University, Dayton, OH 45435
  1057.  
  1058. Does anybody know how to accomplish the following task: Display an ICN#
  1059. resource in a window using System 6. You may recall that almost all of
  1060. the icon utilities are only available on System 7, while the commands like
  1061. "GetIcon" only display ICON resources, which have no mask and leave an
  1062. unsightly white square around them when displayed.
  1063.  
  1064. I know it must be possible to display ICN# resources on pre-System 7
  1065. platforms. Indeed, a game called "Icon Bounce" does this beautifully. At
  1066. first I thought that was done by storing the ICN# patterns and masks as
  1067. regions.  But, alas, I couldn't figure out to get a pointer or handle to
  1068. the bitmap fields of the icon.
  1069.  
  1070. Anyone know the answer or know where I could find it on the net or in a
  1071. book (I have only the new Inside MacIntoshes). Or, does anyone have the
  1072. source code for the aforementioned Icon Bounce game?  Please post the
  1073. response, as I am on a friends account. 
  1074.  
  1075. Michael E. Kotler
  1076.   
  1077.  
  1078.  
  1079.  
  1080. +++++++++++++++++++++++++++
  1081.  
  1082. >From Matt Slot <fprefect@engin.umich.edu>
  1083. Date: 10 May 1994 21:01:38 GMT
  1084. Organization: University of Michigan
  1085.  
  1086. Moshe Segal, s010mes@discover.wright.edu writes:
  1087.  
  1088. >Does anybody know how to accomplish the following task: Display an ICN#
  1089. >resource in a window using System 6. You may recall that almost all of
  1090. >the icon utilities are only available on System 7, while the commands like
  1091. >"GetIcon" only display ICON resources, which have no mask and leave an
  1092. >unsightly white square around them when displayed.
  1093.  
  1094. Here is a snippet I extracted from some Icon plotting tools that I wrote.
  1095. I found the technique in a TechNote (I think). It works for both System 6 
  1096. and System 7. 
  1097.  
  1098. This code is was snipped from a program I wrote and wrapped into a little
  1099. function... it should be ready for dropping into a program with no bugs.
  1100.  
  1101. Matt Slot
  1102. fprefect@engin.umich.edu
  1103.  
  1104. void PlotIconInAllSystems(short iconID, Boolean hilited, Rect *iconRect) {
  1105.     BitMap iconMap;
  1106.     Handle iconHdl;
  1107.     
  1108.     if (!hasSys7 || PlotIconID(&iconRect, 0, (hilited) ? ttSelected : 0, iconID)) {
  1109.         if (iconHdl = GetResource('ICN#', iconID)) {
  1110.             HLock(iconHdl);
  1111.     
  1112.             iconMap.baseAddr = *iconHdl;
  1113.             iconMap.rowBytes = 4;
  1114.             SetRect(&iconMap.bounds,0,0,32,32);
  1115.             CopyBits(&iconMap, &thePort->portBits,
  1116.                     &iconMap.bounds, &iconRect, srcCopy, 0);
  1117.             
  1118.             if (hilited) {        
  1119.                 iconMap.baseAddr += 128;
  1120.                 CopyBits(&iconMap, &thePort->portBits,
  1121.                         &iconMap.bounds, &iconRect, srcXor, 0);
  1122.                 }
  1123.                 
  1124.             HUnlock(iconHdl);
  1125.             ReleaseResource(iconHdl);
  1126.             }
  1127.           else FrameRect(&iconRect);    // Something went wrong -- wimp out
  1128.         }
  1129.     }
  1130.  
  1131. +++++++++++++++++++++++++++
  1132.  
  1133. >From Richard Knuckey <richard@purplex.nacjack.gen.nz>
  1134. Date: Fri, 13 May 94 20:15:37 +1200
  1135. Organization: Purple X's Humble Macintosh
  1136.  
  1137.  
  1138. The following mimics all of the system 7 icon drawing styes (in black and 
  1139. white only) It is cut from a larger and more complete icon handling unit.
  1140.  
  1141. const
  1142.   largeRowBytes = 4;
  1143.   smallRowBytes = 2;
  1144.   miniRowBytes = 2;
  1145.  
  1146.   largeMaskOffset = largeIconSize * largeRowBytes;
  1147.   smallMaskOffset = smallIconSize * smallRowBytes;
  1148.   miniMaskOffset = miniIconSize * miniRowBytes;
  1149.  
  1150. type
  1151.   IconListHandle = ^IconListPtr;
  1152.   IconListPtr = ^IconListType;
  1153.   IconListType = record
  1154.     icon: packed array[1..32] of longint;
  1155.     mask: packed array[1..32] of longint;
  1156.   end;
  1157.  
  1158.  
  1159. procedure DrawIconList (iconBounds: Rect; iconSize, transform: integer;     
  1160.                         iconData: univ Handle);
  1161. var
  1162.   iconBitMap, maskBitMap: BitMap;
  1163.   iconDisabled, iconOffLine, iconOpen, iconSelected: Boolean;
  1164.   copyMode, iconTransform: integer;
  1165.   drawPort: GrafPtr;
  1166.  
  1167. begin
  1168.   GetPort(drawPort);
  1169.   HLock(iconData);
  1170.  
  1171.   with iconBitMap do
  1172.     begin
  1173.       baseAddr := iconData^;
  1174.       bounds := iconBounds;
  1175.       maskBitMap := iconBitMap;
  1176.  
  1177.       case iconSize of
  1178.         largeIconSize: 
  1179.           begin
  1180.             rowBytes := largeRowBytes;
  1181.             maskBitMap.rowBytes := largeRowBytes;
  1182.             maskBitMap.baseAddr := Ptr(ord4(baseAddr) + largeMaskOffset);
  1183.           end;
  1184.  
  1185.         smallIconSize: 
  1186.           begin
  1187.             rowBytes := smallRowBytes;
  1188.             maskBitMap.rowBytes := smallRowBytes;
  1189.             maskBitMap.baseAddr := Ptr(ord4(baseAddr) + smallMaskOffset);
  1190.           end;
  1191.  
  1192.         miniIconSize: 
  1193.           begin
  1194.             rowBytes := miniRowBytes;
  1195.             maskBitMap.rowBytes := miniRowBytes;
  1196.             maskBitMap.baseAddr := Ptr(ord4(baseAddr) + miniMaskOffset);
  1197.           end;
  1198.  
  1199.         otherwise
  1200.           begin
  1201.             HUnlock(iconData);
  1202.             exit(DrawIconList);
  1203.           end;
  1204.       end;
  1205.     end;
  1206.  
  1207.   {the transform type is in the lower nibble}
  1208.   iconTransform := BAND(transform, $000F); 
  1209.   iconDisabled := iconTransform = ttDisabled;
  1210.   iconOffline := iconTransform = ttOffline;
  1211.   iconOpen := iconTransform = ttOpen;
  1212.   iconSelected := BAND(transform, ttSelected) <> 0;
  1213.  
  1214.   if iconOffline | iconOpen then
  1215.     begin
  1216.       PenMode(patXor);
  1217.       if iconSelected then
  1218.         PenPat(dkGray)
  1219.       else
  1220.         PenPat(ltGray);
  1221.       PaintRect(iconBounds);
  1222.     end;
  1223.  
  1224.   if (not (iconOffline | iconOpen)) & iconSelected then
  1225.     copyMode := srcOr
  1226.   else
  1227.     copyMode := srcBic;
  1228.   CopyBits(maskBitmap, drawPort^.portBits, iconBounds, iconBounds,
  1229.            copyMode, nil);
  1230.  
  1231.   if iconDisabled then
  1232.     begin
  1233.       PenMode(patXor);
  1234.       PenPat(gray);
  1235.     end;
  1236.  
  1237.   if iconOpen | iconOffline | iconDisabled then
  1238.     PaintRect(iconBounds);
  1239.  
  1240.   if (not iconOpen) then
  1241.     begin
  1242.       if iconOffline then
  1243.         if iconSelected then
  1244.           copyMode := srcBic
  1245.         else
  1246.           copyMode := srcOr
  1247.       else if iconDisabled then
  1248.         copyMode := srcBic
  1249.       else
  1250.         copyMode := srcXor;
  1251.  
  1252.       CopyBits(iconBitmap, drawPort^.portBits, iconBounds, iconBounds,
  1253.                copyMode, nil)
  1254.     end;
  1255.  
  1256.   if iconDisabled then
  1257.     PaintRect(iconBounds);
  1258.  
  1259.   PenMode(patOr);
  1260.   PenPat(black);
  1261.  
  1262.   HUnlock(iconData);
  1263. end;
  1264.  
  1265.  
  1266. ---------------------------
  1267.  
  1268. >From julie@zoot.sps.mot.com (Julie Shipnes)
  1269. Subject: Motorola announces Power Mac compilers
  1270. Date: 12 May 1994 16:29:40 -0500
  1271. Organization: Motorola RISC Software, Austin, TX
  1272.  
  1273.  
  1274.  MOTOROLA ANNOUNCES HIGH-PERFORMANCE POWERPC MICROPROCESSOR 
  1275.              COMPILERS FOR POWER MACINTOSH
  1276.  
  1277.   AUSTIN, Texas, May 10  -- Motorola's RISC Microprocessor Division 
  1278. today announced plans to port its optimizing PowerPC microprocessor compilers 
  1279. to Apple's complete line of Power Macintosh computers.  The C, C++ and FORTRAN 
  1280. compilers will be fully compatible with Apple's Macintosh Programmers' 
  1281. Workshop (MPW) development environment and will enable developers 
  1282. to simultaneously optimize code for each member of the PowerPC family 
  1283. of microprocessors, including PowerPC 601(TM), PowerPC 603(TM), 
  1284. PowerPC 604(TM) and PowerPC 620(TM).
  1285.  
  1286.   "The ability to take full advantage of the PowerPC performance features of
  1287. each member of the PowerPC family is a critical aspect of Motorola's
  1288. commitment to provide a complete solution for our customers," said Les
  1289. Crudele, vice president and general manager, Motorola RISC Microprocessor
  1290. Division.  "Our compilers will permit developers to leverage the performance
  1291. potential of current and future PowerPC microprocessors without the need to
  1292. recompile applications."
  1293.  
  1294.   The compilers, which are currently being tested within Apple and at select
  1295. beta sites, have demonstrated significant performance improvements for
  1296. critical applications.  Much of the performance increase is because the
  1297. Motorola compilers optimize code to take advantage of individual features of
  1298. the superscalar PowerPC microprocessors, while still maintaining code
  1299. compatibility across all PowerPC architecture family members.
  1300.  
  1301.   The compilers can be configured to optimize code for a particular chip
  1302. implementation, or they can generate a series of objects that target
  1303. multiple PowerPC microprocessor.  As a result, developers can develop
  1304. applications now that will be optimally configured for existing and future
  1305. Apple systems.
  1306.  
  1307.   "By integrating their compiler development with the PowerPC chip design
  1308. efforts in Austin, Motorola is in a unique position to bring highly
  1309. optimizing compilers to market quickly for forthcoming PowerPC
  1310. microprocessors," said Peter Christy, senior director of developer products
  1311. engineering at Apple Computer, Inc. "The Motorola compilers complement the MPW 
  1312. compilers and tools already available from Apple and others, and provide 
  1313. Macintosh developers with a more complete set of options for creating 
  1314. high-performance applications for the exciting Power Macintosh platform."
  1315.  
  1316.   Motorola has also announced its intention to integrate its compilers into
  1317. the CodeWarrior development environment offered by Metrowerks, Inc. By
  1318. supporting both the MPW and CodeWarrior environments, users will be able to
  1319. leverage the performance advantages of the Motorola compilers without
  1320. needing to adopt a new development environment.
  1321.  
  1322.   "The addition of Motorola's compilers to the CodeWarrior environment will
  1323. offer an immediate performance boost for those CodeWarrier developers that
  1324. are working on leading-edge applications for future implementations of
  1325. PowerPC microprocessors," said Metrowerks president and CEO Greg Galanos.
  1326. According to Galanos, Metrowerks is defining a tools and language interface
  1327. for CodeWarrior that will permit developers to use standardized language
  1328. conventions and user interfaces for a variety of development tools.
  1329.  
  1330.   Motorola will accept orders in July 1994 for the MPW-based compilers and
  1331. tools running native on Power Macintosh and 68000-based Macintosh systems at
  1332. an initial list price of $349.  The company will offer a beta version of the
  1333. compiler for CodeWarrior in late 1994.  For additional information,
  1334. customers can call 800-845-MOTO.
  1335.  
  1336.   PowerPC microprocessors are based on reduced instruction set computing
  1337. (RISC) and incorporate leading edge technologies from IBM and Motorola.  The
  1338. family of PowerPC microprocessors is designed to address a wide range of
  1339. computing requirements, from portable and desktop computers to midrange
  1340. workstations and servers, to multi-processing, fault-tolerant and
  1341. supercomputing systems.  PowerPC microcontrollers also will be used for
  1342. embedded control applications in automotive and consumer products.
  1343.  
  1344.   Companies developing PowerPC systems and subsystems include Apple
  1345. Computer, Canon, DayStar Digital, Ford Motor Co., Groupe Bull, Harris,
  1346. Hitachi, IBM, ISG Technologies, Mercury Computer Systems, Motorola Computer
  1347. Group, Parsytec, PowerHouse, Scientific Atlanta, Shannon Computer, Tadpole
  1348. Technologies, the Taiwan New PC Consortium, THOMSON-CSF and YARC.
  1349.  
  1350.   Having 1993 worldwide sales of $5.7 billion, Motorola's Semiconductor
  1351. Products Sector is the largest U.S.-based broad line supplier of
  1352. semiconductors, with a balanced portfolio of more than 50,000 devices.
  1353. Motorola is one of the world's leading providers of wireless communications,
  1354. semiconductors, and advanced electronic systems and services.  Major
  1355. equipment businesses include cellular telephone, two-way radio, paging and
  1356. data communications, personal communications, automotive, defense and space
  1357. electronics and computers.  Communications devices, computers and millions
  1358. of consumer products are powered by Motorola semiconductors.  Motorola's
  1359. 1993 sales were $17 billion.
  1360.  
  1361.   NOTE: Product names are trademarks of their respective companies. PowerPC,
  1362. PowerPC architecture, PowerPC 601, PowerPC 603, PowerPC 604 and PowerPC 620
  1363. are trademarks of International Business Machines Corporation and are used
  1364. by Motorola under license from International Business Machines Corporation.
  1365.  
  1366. CONTACT: (reader/Inquiry response) Motorola, Inc. RISC Microprocessor 
  1367. Division, P.O.  Box 202558, Austin, Texas, 78720-9895, 1-800-845-MOTO
  1368.  
  1369.  
  1370.  
  1371. - -------------------------- Oakhill -------------------------------
  1372. Julie Shipnes                        Mike Phillip
  1373. julie@pets.sps.mot.com               phillip@pets.sps.mot.com     
  1374.  
  1375. Motorola RISC Compiler Development
  1376. - -------------------------------------------------------------------
  1377.  
  1378. ---------------------------
  1379.  
  1380. >From sjf@phantom.com (Simon Jensen_Fellows)
  1381. Subject: Polling the Serial Port
  1382. Date: 28 Apr 1994 21:27:18 GMT
  1383. Organization: [MindVox] / Phantom Access Technologies / (+1 800-MindVox)
  1384.  
  1385. Hi,
  1386. Anyone got any advice about running a background process that polls the 
  1387. serial port ?
  1388. I have tried posting a VBL routine, patching a trap and just running a
  1389. background application.
  1390.  
  1391. My main problem is that I seem to loose all my settings (Baud rate, 
  1392. parity etc) once I exit the routine back to the O/S.
  1393.  
  1394. I guess I`m doing something wrong: any advice or sample code ?
  1395.  
  1396. Thanking you in advance.
  1397.  
  1398. Simon.
  1399.  
  1400.  
  1401. +++++++++++++++++++++++++++
  1402.  
  1403. >From ctrfree@mr.net (Evan Olcott)
  1404. Date: 29 Apr 1994 22:50:13 GMT
  1405. Organization: Centor Freed Inc.
  1406.  
  1407. Best thing to do is to patch WaitNextEvent. Open the serial drivers
  1408. upon startup (a lovely piece of extension code) and hold them in an A4
  1409. global buffer. Upon each call to your patch, get the globals (to get
  1410. the refNum and other stuff) and check the port.
  1411. Seems to work for me. Now the tricky part is serial port arbitration...
  1412. ;-)
  1413.  
  1414. Evan Olcott, programmer
  1415. Centor Freed Inc.
  1416. 100 N. 6th Street #989C
  1417. Minneapolis, MN 55417
  1418. "There are no experimental failures. There's only more data." - Bryce
  1419.  
  1420. +++++++++++++++++++++++++++
  1421.  
  1422. >From oster@netcom.com (David Phillip Oster)
  1423. Date: Thu, 12 May 1994 19:59:24 GMT
  1424. Organization: Netcom Online Communications Services (408-241-9760 login: guest)
  1425.  
  1426.  
  1427. You'd have to be absolutely insane to poll the serial ports. Anybody in their
  1428. right mind would do a PBRead(&io, TRUE); i.e., an asynchronous read. The
  1429. operating system will call your completion routine at interrupt level when
  1430. the read completes: you never need to poll. Your completion routine can do
  1431. another read.  You may want to set up a deadman-switch VBL task: your
  1432. completion routine is expecting data in at most 10 seconds, so it sets up
  1433. a VBL task with a 15 second timeout. If the read completes, the completion
  1434. routine cancels the VBL and starts a fresh one. If something went wrong,
  1435. the VBL gives you back control so you can fix things (like re-enable the
  1436. serial ports, notify the user that something went wrong, etc.)
  1437.  
  1438. Back in '85 I used this technique to interface serial digitizing tablets
  1439.  
  1440. ---------------------------
  1441.  
  1442. End of C.S.M.P. Digest
  1443. **********************
  1444.  
  1445.  
  1446.